package com.example.layered_arch.example.util;

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.JwtParser;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.Claims;

import java.util.Date;

public class JwtUtil {

    private static final String SECRET_KEY = "yourNewSecure256BitSecretKey1234567890abcdefg1234567890abcdefg";// 请替换为更安全的密钥

    // 生成 JWT token
    public static String generateToken(String username) {
        long expirationTime = 1000 * 60 * 60; // 1 小时过期
        Date now = new Date();
        Date expirationDate = new Date(now.getTime() + expirationTime);

        return Jwts.builder()
                .setSubject(username)
                .setIssuedAt(now)
                .setExpiration(expirationDate)
                .signWith(SignatureAlgorithm.HS256, SECRET_KEY)
                .compact();
    }

    // 解析 JWT token
    public static String parseToken(String token) {
        JwtParser jwtParser = Jwts.parser()  // 使用 parser()
                .setSigningKey(SECRET_KEY)    // 设置签名密钥
                .build();                     // 构建 JwtParser 实例

        Claims claims = jwtParser.parseClaimsJws(token).getBody();
        return claims.getSubject();  // 获取 JWT 的 subject（用户名）
    }

    // 验证 token 是否有效
    public static boolean isTokenExpired(String token) {
        JwtParser jwtParser = Jwts.parser()
                .setSigningKey(SECRET_KEY)
                .build();

        Date expirationDate = jwtParser.parseClaimsJws(token).getBody().getExpiration();
        return expirationDate.before(new Date());
    }
}
